package com.shuaigexue.aicodegenerate.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

@Configuration
public class RestTemplateConfig {
    
    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        
        // 为Jackson转换器添加text/json支持
        // 获取RestTemplate现有的消息转换器列表的副本
        List<org.springframework.http.converter.HttpMessageConverter<?>> messageConverters = new ArrayList<>(restTemplate.getMessageConverters());
        
        // 遍历所有消息转换器寻找Jackson转换器
        for (org.springframework.http.converter.HttpMessageConverter<?> converter : messageConverters) {
            // 如果找到Jackson JSON转换器
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                // 将其转换为具体的Jackson转换器类型以便配置
                MappingJackson2HttpMessageConverter jacksonConverter = (MappingJackson2HttpMessageConverter) converter;
                
                // 获取当前支持的媒体类型列表并添加text/json类型
                List<MediaType> supportedMediaTypes = new ArrayList<>(jacksonConverter.getSupportedMediaTypes());
                supportedMediaTypes.add(MediaType.parseMediaType("text/json;charset=UTF-8"));
                
                // 更新Jackson转换器支持的媒体类型列表
                jacksonConverter.setSupportedMediaTypes(supportedMediaTypes);
                
                // 找到并配置了第一个匹配的转换器后退出循环
                break;
            }
        }
        
        return restTemplate;
    }
}